package cn.hy.机考.part03;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author hy
 * <p>
 * 二十一、报数游戏
 * 100 个人围成一圈，每个人有一个编码，编号从 1 开始到 100。他们从 1 开始依 次报数，报到为 M 的人自动退出圈圈，
 * 然后下一个人接着从 1 开始报数，直到剩余的人数小于 M。请问最后剩余的人在 原先的编号为多少?
 * 输入一个整数参数 M
 * 输出描述:如果输入参数 M 小于等于 1 或者大于等于 100，输出“ERROR!”;否 则按照原先的编号从小到大的顺序，以英文逗号分割输出编号字符串
 * 3
 * 输出:58,91
 * <p>
 * 约瑟夫环
 */
public class Demo21 {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int target = sc.nextInt();
            int num = 100;
            List<Integer> list = new ArrayList<>();
            for (int j = 1; j <= num; j++) {
                list.add(j);
            }
            //开始减去每一次轮到的人
            // https://blog.csdn.net/seagal890/article/details/89682021
            int index = 0;
            while (list.size() >= target) {
                index = (index + target - 1) % list.size(); //  数到 M 个数就删除这个数字
                list.remove(index);
            }

            StringBuilder str = new StringBuilder();
            for (int k = 0; k < list.size(); k++) {
                if (k == list.size() - 1) {
                    str.append(list.get(k));
                } else {
                    str.append(list.get(k)).append(",");
                }
            }
            System.out.println(str.toString());
        }
    }

}
